home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / optivc32 / vcfstd.h < prev    next >
C/C++ Source or Header  |  1999-03-06  |  8KB  |  186 lines

  1. /*  VCFstd.h
  2.  
  3.   vector management functions:
  4.   manipulations on whole arrays or vectors of data type "fComplex"
  5.   (single-precision complex numbers)
  6.  
  7.   Copyright (c) 1996-1999 by Martin Sander
  8.   All Rights Reserved.
  9. */
  10.  
  11. #ifndef __VCFSTD_H
  12. #define __VCFSTD_H
  13. #if !defined( __VECLIB_H )
  14. #include <VecLib.h>
  15. #endif
  16.  
  17. #ifdef __cplusplus
  18. extern "C" {
  19. #endif
  20.  
  21. /*************************  Generation  **************************/
  22.  
  23. cfVector   __vf  VCF_vector( ui size );
  24. cfVector   __vf  VCF_vector0( ui size );
  25.  
  26. /***************  Addressing single vector elements ******************/
  27.  
  28. fComplex _VFAR * VCF_Pelement( cfVector X, ui n );
  29.       /* returns a pointer to the n'th element of X. For the memory model
  30.          HUGE, the pointer is normalized. */
  31. #define VCF_element( X, n )  (*VCF_Pelement( X, n ))
  32.  
  33. /*******************  Initialization **********************************/
  34.  
  35. void  __vf  VCF_equ0( cfVector X, ui size );
  36. void  __vf  VCF_equ1( cfVector X, ui size );
  37. void  __vf  VCF_equC( cfVector X, ui size, fComplex C );
  38. void  __vf  VCF_equV( cfVector Y, cfVector X, ui size );
  39. void  __vf  VCFx_equV( cfVector Y, cfVector X, ui size,
  40.                        fComplex A, fComplex B );
  41. void  __vf  VCF_ramp( cfVector X, ui size, fComplex Start, fComplex Rise );
  42.  
  43. void  __vf  VF_CtoReIm( fVector Re, fVector Im, cfVector X, ui size );
  44. void  __vf  VF_ReImtoC( cfVector Y, fVector Re, fVector Im, ui size );
  45. void  __vf  VF_CtoRe(  fVector Re, cfVector X, ui size );
  46. void  __vf  VF_RetoC(  cfVector Y, fVector Re, ui size );
  47. void  __vf  VF_CtoIm(  fVector Im, cfVector X, ui size );
  48. void  __vf  VF_ImtoC(  cfVector Y, fVector Im, ui size );
  49. void  __vf  VF_CtoPolar( fVector Mag, fVector Arg, cfVector X, ui size );
  50. void  __vf  VF_PolartoC( cfVector Y, fVector Mag, fVector Arg, ui size );
  51. void  __vf  VF_CtoNorm( fVector Norm, cfVector X, ui size );
  52. void  __vf  VF_CtoAbs( fVector Abs, cfVector X, ui size );
  53. void  __vf  VF_CtoArg( fVector Arg, cfVector X, ui size );
  54. int   __vf  VCF_abs(   fVector Y, cfVector X, ui size );
  55. #define     VCF_real       VF_CtoRe
  56. #define     VCF_imag       VF_CtoIm
  57. #define     VCF_arg        VF_CtoArg
  58. #define     VCF_norm       VF_CtoNorm
  59. #define     VCF_polar      VF_PolartoC
  60. #define     VCF_complex    VF_ReImtoC
  61.  
  62. /****************  Data-type interconversions  ***************************/
  63.  
  64. void  __vf   V_CFtoCD( cdVector Y, cfVector X, ui size );
  65. void  __vf   V_CDtoCF( cfVector Y, cdVector X, ui size );
  66. #ifdef __BORLANDC__   /* 80-bit IEEE numbers supported */
  67.     void  __vf   V_CFtoCE( ceVector Y, cfVector X, ui size );
  68.     void  __vf   V_CEtoCF( cfVector Y, ceVector X, ui size );
  69. #else  /* no IEEE number support for other compilers */
  70.     #define V_CFtoCE V_CFtoCD
  71.     #define V_CEtoCF V_CDtoCF
  72. #endif
  73.  
  74.  
  75. /****************  Index-oriented manipulations ***********************/
  76.  
  77. void  __vf  VCF_reflect( cfVector X, ui size );
  78. void  __vf  VCF_delete( cfVector X, ui size, ui pos );
  79. void  __vf  VCF_insert( cfVector X, ui size, ui pos, fComplex C );
  80. void  __vf  VCF_rev( cfVector Y, cfVector X, ui size );
  81. #ifdef V_HUGE
  82.    void  __vf  VCF_rotate( cfVector Y, cfVector X, ui size, long pos );
  83. #else
  84.    void  __vf  VCF_rotate( cfVector Y, cfVector X, ui size, int pos );
  85. #endif
  86.  
  87. void  __vf  VCF_indpick( cfVector Y, uiVector Ind, ui sizey, cfVector X );
  88. void  __vf  VCF_indput(  cfVector Y, cfVector X, uiVector Ind, ui sizex );
  89. void  __vf  VCF_subvector( cfVector Y, ui sizey, cfVector X, int step );
  90.  
  91.  
  92. /*************** Functions of a sub-set of elements  ********************/
  93.  
  94. void  __vf  VCF_subvector_equC(  cfVector Y, ui subsiz, unsigned samp,
  95.                                  fComplex C );
  96. void  __vf  VCF_subvector_equV(  cfVector Y, ui subsiz, unsigned samp,
  97.                                  cfVector X );
  98.     /*   for arithmetic functions of subsets, see <VCFmath.h>  */
  99.  
  100. /**************** One-Dimensional Vector Operations ***********************/
  101.  
  102. float     __vf  VCF_absmax(  cfVector X, ui size );
  103. float     __vf  VCF_absmin(  cfVector X, ui size );
  104. float     __vf  VCF_absmaxind( ui _VFAR *pos, cfVector X, ui size );
  105. float     __vf  VCF_absminind( ui _VFAR *pos, cfVector X, ui size );
  106. #if defined __cplusplus && defined _CMATH_CLASSDEFS
  107. } // the following functions cannot be extern "C", if fComplex is a class
  108. #endif
  109. fComplex  __vf  VCF_maxReIm(     cfVector X, ui size );
  110. fComplex  __vf  VCF_minReIm(     cfVector X, ui size );
  111. fComplex  __vf  VCF_absmaxReIm(  cfVector X, ui size );
  112. fComplex  __vf  VCF_absminReIm(  cfVector X, ui size );
  113. fComplex  __vf  VCF_sum(     cfVector X, ui size );
  114. fComplex  __vf  VCF_prod(    cfVector X, ui size );
  115. fComplex  __vf  VCF_mean(   cfVector X, ui size );
  116. fComplex  __vf  VCF_meanwW( cfVector X, fVector Wt, ui size );
  117. #if defined __cplusplus && defined _CMATH_CLASSDEFS
  118. extern "C" {
  119. #endif
  120. void      __vf  VCF_runsum(  cfVector Y, cfVector X, ui size );
  121. void      __vf  VCF_runprod( cfVector Y, cfVector X, ui size );
  122. int       __vf  VCF_iselementC( cfVector Tab, ui size, fComplex C );
  123. ui        __vf  VCF_iselementV( cfVector Y, cfVector X, ui sizex,
  124.                                 cfVector Tab, ui sizetab );
  125.  
  126.  
  127. /*********  Fourier Transforms, Convolutions, Filtering  ****************/
  128.  
  129. void  __vf   VCFl_FFT( cfVector Y, cfVector X, ui size, int dir );
  130. void  __vf   VCFl_filter( cfVector Y, cfVector X, cfVector Flt, ui size );
  131.  
  132. void  __vf   VCFs_FFT( cfVector Y, cfVector X, ui size, int dir );
  133. void  __vf   VCFs_filter( cfVector Y, cfVector X, cfVector Flt, ui size );
  134.  
  135. #if( defined( __LARGE__ ) || defined( __COMPACT__ ) )
  136.    #define VCF_FFT       VCFl_FFT
  137.    #define VCF_filter    VCFl_filter
  138. #else
  139.    #define VCF_FFT       VCFs_FFT
  140.    #define VCF_filter    VCFs_filter
  141. #endif
  142.  
  143.  
  144. /***************************  Input and Output *****************************/
  145.  
  146. void  __vf  VCF_fprint( FILE _VFAR *stream, cfVector X, ui size,
  147.                                  unsigned nperline, unsigned linewidth );
  148. #if !defined _Windows || defined __FLAT__ || defined _WIN32
  149.     void  __vf  VCF_cprint( cfVector X, ui size, unsigned nperline );
  150. #endif
  151. #define     VCF_print( X, sz, npl ) VCF_fprint( stdout, X, sz, npl, 80 )
  152.   /*  VCF_print, VCF_cprint usable only for DOS and Win32 console applications! */
  153. void  __vf  VCF_write( FILE _VFAR *stream, cfVector X, ui size );
  154. void  __vf  VCF_read( cfVector X, ui size, FILE _VFAR *stream );
  155. void  __vf  VCF_nwrite( FILE _VFAR *stream, unsigned n, ui size, ... );
  156. void  __vf  VCF_nread( unsigned n, ui size, FILE _VFAR *stream, ... );
  157. void  __vf  VCF_setWriteFormat( char _VFAR *FormatString );
  158.                                             /* for VCF_write and VCF_nwrite */
  159. void  __vf  VCF_setWriteSeparate( char _VFAR *SepString ); /* for VCF_write */
  160. void  __vf  VCF_setNWriteSeparate( char _VFAR *SepString ); /* for VCF_nwrite */
  161. #ifdef V_HUGE
  162.     void  __vf  VCF_store( FILE *stream, cfVector X, ui size );
  163.     void  __vf  VCF_recall( cfVector X, ui size, FILE _VFAR *stream  );
  164. #else
  165.     #ifdef __cplusplus
  166.          void  inline VCF_store( FILE _VFAR *stream, cfVector X, ui size )
  167.          {    fwrite( X, sizeof(fComplex), size, stream ); 
  168.          }
  169.          void  inline VCF_recall( cfVector X, ui size, FILE _VFAR *stream )
  170.          {    fread(  X, sizeof(fComplex), size, stream );
  171.          }
  172.     #else
  173.         #define VCF_store( str, X, sz )  \
  174.                      fwrite( X, sizeof(fComplex), sz, str )
  175.         #define VCF_recall( X, sz, str ) \
  176.                      fread(  X, sizeof(fComplex), sz, str )
  177.     #endif
  178. #endif      /* VCF_store, VCF_recall in binary format */
  179.  
  180. #ifdef __cplusplus
  181. }
  182. #endif
  183.  
  184.  
  185. #endif /*  __VCFSTD_H */
  186.